package com.type.service;

public class pageUtil {

	/**
	 * 작성자 : jhm
	 * 작성일 : 2013.05.07
	 * @param args
	 */
	 
	 /**
	  *params 
	  *  numberPage:한페이지 표시할 게시물 수
	  *  dataCount:전체테이터 개수
	  */
	  public int getPageCount(int numperPage, int dataCount){ //-->인자값으로 전체 데이터수를 구한 변수와 한페이지 표시할 데이터 갯수를 구한 변수를 인자값으로 받는다.
	  int result=0;
	  
	  result = dataCount/numperPage; //-->만약 총데이터 갯수가 15개이고 페이지표시하고 싶은 데이터수가 10개라면 15/10=1이다.
	  if(dataCount%numperPage!=0) //--> 그래서 여기서 나머지 구하기 연산을 해줘서 0이 아니면 페이지수는 +=1 그래서 2페이지가 된다. 결과적으로 계산해보면 맞다 근데 왜 여기서 0이 아니면 일까? 만약에 총데이터수가 30이고 표시하고 싶은 데이터수가 10개이면 나머지가 3으로 딱 떨어지게 되는데 이럴경우 3페이지로 하는것이 맞기 때문이다.1~10, 11~20, 21~30  정확히 3페이지의 수량이다.

	   result=result+1; //여기서 +1 시킨다 mod값이 0이 아닐때만
	  
	  return result;
	 }
	  /**페이징 처리를 위한 메소드
	  *params
	  * current_page:현재 표시할 페이지 번호
	  * total_page:전체 페이지 수
	  * list_url:링크를 설정한 주소
	  */
	  public String pageIndexList(int current_page, int total_page, String list_url){
	   StringBuffer sb = new StringBuffer(); 
	   int numperBlock=10;//보통 10개단위로 한다. 페이징 처리 할때 아래 숫자를 10개씩 보여줌.
	   int currentPageSetup;//현재 페이지 에 맞춰서..
	   int page;
	   int n;
	   
	   if(current_page==0 && total_page<=0)//데이터가 없거나 데이터수가 1페이지도 못채울때 페이징 처리를 할 필요가 없다.
	    return"";
	   
	   
	   if(list_url.indexOf("?")!=-1)//검색값이 있으면 이미 request 값에 searchKey 값과 value 값이 있으므로 &을 붙여 줘야 한다.
	    list_url+="&";
	   else
	    list_url+="?";
	   
	   //currentPageSetup : 표시할페이지 -1
	   currentPageSetup = (current_page/numperBlock)*numperBlock; //현재 페이지5 numperBlock

	//만약에 현제 페이지가 5페이지다(current_page) 여기서 numperBlock이 10이면 5/10 =0 이다 여기서 0*10해도 0이다 그렇지만 현제 페이지가 11페이지라면 11/10=1 ->1 * 10 = 10 이라는 값을 currentPageSetup을 가지게 됨                       if(current_page%numperBlock==0)//만약 위에서 current_page 가 20이였다면 20/10=2 *10 하면 20이되는데 이럴경우 다시 10을 빼서 10으로 만들어 준다. 
	    currentPageSetup=currentPageSetup-numperBlock;
	   
	   //1, [Prev] 처리
	   n=current_page-numperBlock;//해당 페이지 만큼 앞으로 가기 위한 n변수
	   if(total_page>numperBlock && currentPageSetup>0){//currentPageSetup 0보다 큰경우는 이미 10이상이기 때문이다. 이때 current 페이지가 11페이지 이상일경우 앞에 1[prev] 라는 것을 붙이기 위해서다.

	    sb.append("<a href='"+list_url+"pageNum=1'>1</a>&nbsp;");//1
	    sb.append("[<a href='"+list_url+"pageNum="+n+"'>Prev</a>]&nbsp;");//[Prev] 클릭할 경우 n변수로 이동하는데 위에 선언되있음 12에서 prev할경우 2페이지로 이동함.
	   }
	    
	   //바로가기페이지
	   page=currentPageSetup+1;//+1 하는 이유는 앞서 currentPageSetup에서 10의 값을 가져 왔다면 10부터 시작하는것이 아니라 11부터 시작해야 하기 때문에 +1 해준다.

	   while(page<=total_page && page<=currentPageSetup+numperBlock){ //21이되면 false가 되어서 빠져나감 근데 토탈 페이지가 15페이지라면 16에서 빠져나간다.
	   if(page==current_page){//현재 페이지와 같다면?
	     sb.append("<font color='Fuchsia'>"+page+"</font>&nbsp;");//현재 페이지는 번호는 색깔로 표시함
	   }
	   else{
	     sb.append("<a href='"+list_url+"pageNum="+page+"'>"+page+"</a>&nbsp;"); //나머지는 a태그를 이용해서 링크를 걸어둔다.
	     
	   }
	   page++;
	   }
	   
	   //[Next] 마지막 페이지
	   n=current_page+numperBlock; //페이지 이동을 위해서 페이지2에서 next 클릭 ->12페이지 이동
	   if(total_page-currentPageSetup > numperBlock){//토탈 페이지가 16이라고 하고 현제 페이지가 6이면 currentPageSetup 은 0이므로 16-0 =16이다  numperBlock 이 10이라  가정하면 조건이 참이므로 현제 페이지에서는 [next] 페이지와 마지막 페이지가 나온다.

	    sb.append("[<a href='"+list_url+"pageNum="+n+"'>Next</a>]&nbsp;");
	    sb.append("<a href='"+list_url+"pageNum="+total_page+"'>"+total_page+"</a>");
	   }
	   return sb.toString();
	  }
}
